

#ifndef UC_GECSPL2D_H
#define UC_GECSPL2D_H

class UcGePointOnCurve2d;
class UcGeCurve2dIntersection;
class UcGeInterval;
class UcGePlane;

#include "zgesent2d.h"
#include "zgept2dar.h"
#include "zgevc2dar.h"
#include "zgevec2d.h"
#include "zgekvec.h"
#pragma pack (push, 8)

class
GE_DLLEXPIMPORT
UcGeCubicSplineCurve2d : public UcGeSplineEnt2d
{
public:

    UcGeCubicSplineCurve2d();
    UcGeCubicSplineCurve2d(const UcGeCubicSplineCurve2d& spline);

    UcGeCubicSplineCurve2d(const UcGePoint2dArray& fitPnts,
			   const UcGeTol& tol = UcGeContext::gTol);

    UcGeCubicSplineCurve2d(const UcGePoint2dArray& fitPnts,
			   const UcGeVector2d& startDeriv,
			   const UcGeVector2d& endDeriv,
                           const UcGeTol& tol = UcGeContext::gTol);

    UcGeCubicSplineCurve2d(const UcGeCurve2d& curve,
                           double epsilon = UcGeContext::gTol.equalPoint());

	UcGeCubicSplineCurve2d(const UcGeKnotVector& knots,
	                       const UcGePoint2dArray& fitPnts,
			       const UcGeVector2dArray& firstDerivs,
	                       ZSoft::Boolean isPeriodic = ZSoft::kFalse );

    int                     numFitPoints   ()        const;
    UcGePoint2d             fitPointAt     (int idx) const;
    UcGeCubicSplineCurve2d& setFitPointAt  (int idx, const UcGePoint2d& point);
    UcGeVector2d            firstDerivAt   (int idx) const;
    UcGeCubicSplineCurve2d& setFirstDerivAt(int idx, const UcGeVector2d& deriv);

    UcGeCubicSplineCurve2d&  operator = (const UcGeCubicSplineCurve2d& spline);
};

#pragma pack (pop)
#endif
